extends Node2D

## 主场景控制器
## 用于测试和演示背包系统功能

@onready var inventory_system: InventorySystem = $UI/InventorySystem

func _ready():
	# 连接背包系统信号
	inventory_system.inventory_changed.connect(_on_inventory_changed)
	inventory_system.item_used.connect(_on_item_used)
	
	# 设置输入映射
	setup_input_map()

func setup_input_map():
	# 添加背包切换按键映射
	if not InputMap.has_action("toggle_inventory"):
		InputMap.add_action("toggle_inventory")
		var event = InputEventKey.new()
		event.keycode = KEY_I
		InputMap.action_add_event("toggle_inventory", event)
	
	# 添加丢弃物品按键映射 (Delete键)
	if not InputMap.has_action("drop_item"):
		InputMap.add_action("drop_item")
		var drop_event = InputEventKey.new()
		drop_event.keycode = KEY_DELETE
		InputMap.action_add_event("drop_item", drop_event)
	
	# 添加整理背包按键映射 (R键)
	if not InputMap.has_action("sort_inventory"):
		InputMap.add_action("sort_inventory")
		var sort_event = InputEventKey.new()
		sort_event.keycode = KEY_R
		InputMap.action_add_event("sort_inventory", sort_event)

func _input(event: InputEvent):
	# 处理背包切换快捷键
	if event.is_action_pressed("toggle_inventory"):
		inventory_system.toggle_inventory()
		get_viewport().set_input_as_handled()

func _on_toggle_inventory_button_pressed():
	"""切换背包显示状态"""
	inventory_system.toggle_inventory()

func _on_add_random_item_button_pressed():
	"""添加随机物品到背包"""
	var items = inventory_system.available_items
	if items.size() > 0:
		var random_item = items[randi() % items.size()]
		var count = 1
		
		# 如果是可堆叠物品，随机添加1-5个
		if random_item.can_stack():
			count = randi_range(1, min(5, random_item.max_stack_size))
		
		if inventory_system.add_item(random_item, count):
			print("添加了 ", count, " 个 ", random_item.item_name)
		else:
			print("背包已满，无法添加物品")

func _on_clear_inventory_button_pressed():
	"""清空背包"""
	for slot in inventory_system.inventory_slots:
		slot.clear_slot()
	inventory_system.inventory_changed.emit()
	print("背包已清空")

func _on_inventory_changed():
	"""背包内容发生变化时的回调"""
	print("背包内容已更新")
	
	# 可以在这里添加保存背包数据的逻辑
	# save_inventory_data()

func _on_item_used(item_data: ItemData):
	"""物品被使用时的回调"""
	print("使用了物品: ", item_data.item_name)
	
	# 根据物品类型执行不同的效果
	match item_data.item_name:
		"生命药水":
			print("恢复了50点生命值！")
			# 这里可以添加实际的生命值恢复逻辑
		_:
			print("物品效果: ", item_data.description)

## 保存背包数据（示例）
func save_inventory_data():
	var _save_data = {
		"inventory": inventory_system.get_inventory_data(),
		"timestamp": Time.get_unix_time_from_system()
	}
	
	# 这里可以将数据保存到文件
	# var file = FileAccess.open("user://inventory_save.dat", FileAccess.WRITE)
	# if file:
	# 	file.store_string(JSON.stringify(_save_data))
	# 	file.close()
	# 	print("背包数据已保存")

## 加载背包数据（示例）
func load_inventory_data():
	# var file = FileAccess.open("user://inventory_save.dat", FileAccess.READ)
	# if file:
	# 	var json_string = file.get_as_text()
	# 	file.close()
	# 	
	# 	var json = JSON.new()
	# 	var parse_result = json.parse(json_string)
	# 	if parse_result == OK:
	# 		var save_data = json.data
	# 		inventory_system.load_inventory_data(save_data["inventory"])
	# 		print("背包数据已加载")
	pass

## 演示背包系统的高级功能
func demonstrate_advanced_features():
	"""演示背包系统的高级功能"""
	print("=== 背包系统功能演示 ===")
	
	# 添加一些测试物品
	var sword = inventory_system.available_items[0]  # 铁剑
	var potion = inventory_system.available_items[2]  # 生命药水
	
	# 测试添加物品
	print("1. 添加物品测试:")
	inventory_system.add_item(sword, 1)
	inventory_system.add_item(potion, 5)
	
	# 测试物品查询
	print("2. 物品查询测试:")
	print("背包中的剑数量: ", inventory_system.get_item_count(sword))
	print("背包中的药水数量: ", inventory_system.get_item_count(potion))
	print("是否有剑: ", inventory_system.has_item(sword))
	
	# 测试物品移除
	print("3. 物品移除测试:")
	var removed = inventory_system.remove_item(potion, 2)
	print("移除了 ", removed, " 个药水")
	print("剩余药水数量: ", inventory_system.get_item_count(potion))
